type Watcher<T> = {
    on<K extends string & keyof T>(
        eventName: `${K}Change`,
        callback: (oldValue: T[K], newValue: T[K]) => void
    ): void;
}
// 声明，其他地方不需要引入就能使用
declare function watch<T>(obj: T): Watcher<T>;

const personWatcher = watch({
    firstName: 'Jack',
    lastName: 'Ron',
    age: 25,
    sex: '男',
    level: 2
})

personWatcher.on('ageChange', (oldValue, newValue) => {

})